package com.iflytek.exam.utils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

public class StringSplitter {

    /**
     * 将输入的字符串分割成单个字符，并将字母字符存储在一个字符串数组中。
     * 此方法专门针对包含字母和其他字符的字符串设计，旨在提取字符串中的字母成分。
     *
     * @param input 待处理的字符串
     * @return 包含输入字符串中所有字母字符的字符串数组
     */
    public static String[] splitString(String input) {
        // 初始化一个列表，用于存储分割后的字母字符
        List<String> resultList = new ArrayList<>();

        // 遍历输入字符串的每个字符
        for (int i = 0; i < input.length(); i++) {
            char currentChar = input.charAt(i);

            // 判断当前字符是否为字母，如果是，则将其添加到结果列表中
            if (Character.isLetter(currentChar)) {
                resultList.add(String.valueOf(currentChar));
            }
        }

        // 将结果列表转换为字符串数组并返回
        return resultList.toArray(new String[0]);
    }




    // 提取并排序包含A、B、C、D的字符
    public static String extractAndSortChars(String input) {
        // 创建一个列表用于存储提取的字符
        List<Character> charList = new ArrayList<>();

        // 遍历输入字符串，提取A、B、C、D字符
        for (char c : input.toCharArray()) {
            if (c == 'A' || c == 'B' || c == 'C' || c == 'D') {
                charList.add(c);
            }
        }

        // 按照A、B、C、D的顺序排序
        Collections.sort(charList, (c1, c2) -> {
            String order = "ABCD";
            return Integer.compare(order.indexOf(c1), order.indexOf(c2));
        });

        // 将排序后的字符列表转换为字符串，并用逗号隔开
        StringBuilder sortedString = new StringBuilder();
        for (int i = 0; i < charList.size(); i++) {
            sortedString.append(charList.get(i));
            if (i < charList.size() - 1) {
                sortedString.append(",");
            }
        }

        return sortedString.toString();
    }

    // 提取数组中的A、B、C、D元素，并以逗号隔开的字符串形式返回
    public static String extractAndJoinChars(String[] input) {
        // 创建一个列表用于存储提取的字符
        List<Character> charList = new ArrayList<>();

        // 遍历输入数组中的每个字符串，提取A、B、C、D字符
        for (String str : input) {
            for (char c : str.toCharArray()) {
                if (c == 'A' || c == 'B' || c == 'C' || c == 'D') {
                    charList.add(c);
                }
            }
        }

        // 按照A、B、C、D的顺序排序
        Collections.sort(charList, (c1, c2) -> {
            String order = "ABCD";
            return Integer.compare(order.indexOf(c1), order.indexOf(c2));
        });

        // 将字符列表转换为字符串，并用逗号隔开
        return charList.stream()
                .map(String::valueOf)
                .collect(Collectors.joining(","));
    }
}